package com.jxd.ordering.dao;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jxd.ordering.model.Order;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface OrderMapper {
    /**
     * 新增订餐信息
     * @param order 订单实体类
     * @return 是否新增成功
     */
    boolean insertOrder(Order order);

    /**
     * 修改订餐信息
     * @param order 订单实体类
     * @return 是否修改成功
     */
    boolean updateOrder(Order order);

    /**
     * 修改订单状态
     * @param orderno 订单编号
     * @param statu 订单状态
     * @return 是否修改成功
     */
    boolean updateOrderStatu(int orderno, int statu);

    /**
     * 批量删除订单
     * @param ordernos 订单编号数组
     * @return 是否删除成功
     */
    boolean deleteOrder(@Param("ordernos") int[] ordernos);

    /**
     * 分页查询订单信息
     * @param map 包含 int page, int limit, String start, String end, int empno, int type, int statu
     * @return 查询结果
     */
    IPage<Order> selectOrderByPage(IPage<Order> page, Map<String, String> map);

    /**
     * 按订单编号查询订单信息
     * @param orderno 订单编号
     * @return 查询结果
     */
    Order selectOrderByOrderno(int orderno);

    /**
     * 在某个订单中批量新增某些员工记录
     * @param orderno 订单号
     * @param empnos 员工编号数组
     * @return 是否新增成功
     */
    boolean insertOrderEmp(int orderno, @Param("empnos") int[] empnos);

    /**
     * 批量删除某个订单中某些员工记录
     * @param orderno 订单号
     * @param empnos 员工编号数组
     * @return 是否删除成功
     */
    boolean deleteOrderEmp(int orderno, @Param("empnos") int[] empnos);

    /**
     * 查询某订单下是否有某个员工
     * @param orderno 订单号
     * @param empno 员工编号
     * @return 是否有该员工
     */
    int selectOrderEmpExist(int orderno, int empno);

    /**
     * 按订单号获取所有订餐人员编号数组
     * @param orderno 订单号
     * @return 查询结果
     */
    List<Integer> selectAllOrderEmp(int orderno);

    /**
     * 按订单号获取所有订餐人员信息
     * @param orderno 订单号
     * @return 查询结果
     */
    List<Map<String,String>> getAllOrderEmp(int orderno);

    /**
     * 批量新增订餐餐品信息
     * @param list 包含 orderno 订单编号 mealno 餐品编号 count 数量 remark 备注
     * @return 是否新增成功
     */
    boolean insertOrderMeal(@Param("list") List<Map> list);

    /**
     * 批量修改订餐餐品信息
     * @param list 包含 orderno 订单编号 mealno 餐品编号 count 数量 remark 备注
     * @return 是否修改成功
     */
    boolean updateOrderMeal(int orderno, @Param("list") List<Map> list, @Param("fields") List fields);

    /**
     * 批量删除订餐餐品信息
     * @param orderno 订单编号
     * @param mealnos 餐品编号数组
     * @return 是否删除成功
     */
    boolean deleteOrderMeal(int orderno, @Param("mealnos") int[] mealnos);

    /**
     * 根据订单号和餐品编号查询订餐餐品信息
     * @param orderno 订单编号
     * @param mealno 餐品编号
     * @return 查询结果
     */
    Map<String, Object> selectOrderMeal(int orderno, int mealno);

    /**
     * 按订单号查询所有订餐餐品信息
     * @param orderno 订单编号
     * @return 查询结果
     */
    List<Map<String, Object>> selectAllOrderMeal(int orderno);
}
